当前位置: 首页 > 知识库问答 >
问题:

当列表的内容包含子值时,如何在列表上循环?

翟鸿振
2023-03-14

我试图解析出这个有超过8000行硬编码数据验证的方法。其中大部分是数据源中不同字段的相同的、重复的逻辑。

很多看起来像这样(C):

temp_str = _enrollment->Fields->FieldByName("ID")->AsString.SubString(1,2);
if (temp_str.IsEmpty())
    { /* do stuff */ }
else
{
  if (!IsDigitsOnly(temp_str))
      { /* do different stuff */ }
  else
      { /* do other stuff */ }
}

temp_str = _enrollment->Fields->FieldByName("OtherField");
if (temp_str.IsEmpty())
    /* do more stuff */

所以基本上,我只需要解析出每对temp_str= 之间的值,然后得到每个唯一的验证“块”。

我目前面临的问题是确定每个“块”的开始和结束位置。

这是我的代码:

static void Main(string[] args)
{
    string file = @"C:\somePathToFile.h";
    string validationHeader = "temp_str = _enrollment->Fields->FieldByName(";
    string outputHeader = "=====================================================";
    int startOfNextValidation;

    List<string> lines = File.ReadAllLines(file).ToList<string>();
    List<string> validations = new List<string>();

    while (lines.Contains(validationHeader))
    {

        //lines[0] should be the "beginning" temp_str assignment of the validation
        //lines[startOfNextValidation] should be the next temp_str assignment
        startOfNextValidation = lines.IndexOf(validationHeader, lines.IndexOf(validationHeader) + 1);

        //add the lines within that range to another collection
        //  to be iterated over and written to a textfile later
        validations.Add((lines[0] + lines[startOfNextValidation]).ToString());

        //remove everything up to startOfNextValidation so we can eventually exit
        lines.RemoveRange(0, startOfNextValidation);
    }

    StreamWriter sw = File.CreateText(@"C:\someOtherPathToFile.txt");

    foreach (var v in validations.Distinct())
    {
        sw.WriteLine(v);
        sw.WriteLine(outputHeader);
    }

    sw.Close();
}

我的while语句永远不会被点击,它只会立即跳转到StreamWritercreation,它会创建一个空文本文件,因为0.05 validations

因此,我想我的第一个问题是,如何在检查以确保这些项目中仍有包含特定“子值”的项目时循环使用List

编辑:

我也试过这个;

while (lines.Where(stringToCheck => stringToCheck.Contains(validationHeader)))

按照这个答案;https://stackoverflow.com/a/18767402/1189566

但是它说它不能从< code>string转换成< code>bool?

共有2个答案

牟稳
2023-03-14

简单的一个来检查它是否具有所需的值

foreach (var setting in FullList)
{
    if(cleanList.Exists(x => x.ProcedureName == setting.ProcedureName)) 
       setting.IsActive = true; // do you business logic here 
    else
       setting.IsActive = false;
    updateList.Add(setting);
}
龚奇逸
2023-03-14

你是说这样的事情?

while (lines.Any(x => x.Contains(validationHeader)))

这将检查验证标头是否是列表中任何字符串的一部分。

我也试过这个;

while (lines.Where(stringToCheck => stringToCheck.Contains(validationHeader)))

这是行不通的,因为LINQ的< code>Where方法将返回一个< code>IEnumerable

 类似资料:
  • 问题内容: 这是很常见的,我遍历一个Python列表,让双方的内容 和 他们的索引。我通常会执行以下操作: 我发现这种语法有点难看,尤其是函数内部的部分。还有其他更优雅/ Python风格的方法吗? 问题答案: 使用内置函数:http : //docs.python.org/library/functions.html#enumerate

  • 我正在寻找解决这个问题的方法,已经快三天了。我有一个带有占位符的Word文档。对于如何解析word文档模板并用内容替换占位符,我们有自己的实现。但我遇到了一个问题,段落列表并没有包含word文档中的所有内容。我得到了OpenXmlPartRootElement的所有段落类型的后代。 然后我检查特定的占位符。 文档中有3个相同的占位符,但此语句只找到其中两个。这会破坏所有文档,因此会对其进行半解析。

  • 我试图遍历一个字典,其中每个键都包含一个列表,该列表依次包含0到20个子列表。目标是迭代字典1的值,检查它们是否在字典2的任何子列表中用于相同的密钥,如果是,则将1添加到计数器中,而不再次考虑子列表。 代码看起来有点像这样: 这显然不起作用,主要是因为代码无法通过列表和子列表进行分层检查,部分原因是可能不正确的迭代语法。我对嵌套循环和迭代没有最大的把握,这使得这很痛苦。另一种选择是首先使用以下方法

  • 问题内容: 我的字符串列表如下所示: 我的期望是,我想检查父列表是否包含 序列 子列表,然后基于子列表获取父列表中的开始索引和结束索引。 从上面的示例: 我尝试使用方法,但它不在乎列表项的顺序,因此无法从此方法获取开始和结束索引。 我正在寻找最快的方法,因为我的列表中有很多数据,而且我必须从许多输入字符串中进行搜索。 任何帮助,将不胜感激! 更新 : 我需要获取所有子列表的索引都包含在父列表中。例

  • 我有一个具有字段is和is_searchable data has的列表

  • 问题内容: 我希望您能够为我解决有关JAXB的问题提供帮助。 我有以下XML文件: XML可以在属性下包含其他元素(field1,field2),文本或两者。 和以下类: 我想将XML解组到上述类中。我遇到的问题是,在内容列表中,除了文本之外,还有其他字符,例如换行符和制表符。更具体地说,基于上述XML,当我尝试解组时会得到: 内容为[“ \ n \ t \ t”,“ \ n \ t \ t”,“