在不使用 foreach 的情况下检查列表中项目的条件


如何在不使用 foreach 的情况下检查列表中项目的条件。 例如,不必这样做:

C#
foreach(string[] item in mylist)
{
  if(Convert.ToBoolean(item[0]){}
}

我可以直接访问我的列表的项目。 我怎样才能实现这个目标?

谢谢!

解决方案4

首先,您无法找到列表中与条件匹配的第一项,或者, 全部 列表中的项目与某些条件匹配但不 迭代:使用 Linq 只会为您“自动化”。

这里需要你澄清的问题到底是什么 你要 从字符串列表的迭代中返回:

1. 列表中可转换为布尔值的字符串的索引列表?

2. 或者,只是列表中的一堆布尔值:如果没有索引,很难想象它的用途。

3.或者,对每个可以根据布尔值和/或该值在字符串列表中的索引转换为布尔值的字符串采取一些操作(执行一些代码)? 恕我直言,一个更合理的用例。

4.请参阅我对您上面帖子的评论,了解您还需要澄清的内容

我将在这里向您展示一个以 Dictionary 形式返回字符串列表的示例…其中 ‘key 是列表中布尔值的索引,value 是转换后的布尔值。

C#
// required
using System.Linq

// assume the data source here is a simple List<string>
List<string> strList = new List<string>
{
    "True", "what", "False", "True", "ozone", "False"
};

// this variable must be initialized to be used in the Linq shown here
bool booltest = false;

Dictionary<int,bool> dctIntBool = strList
.Select((str, index) => new {index, str})
.Where(pair => Boolean.TryParse(pair.str, out booltest))
.ToDictionary(pair => pair.index, pair => booltest);

请注意这里使用的 Linq ‘Select 创建/保留其迭代的集合的索引的变体:每对索引/值都被投影到一个新的匿名结构中; 然后,Where Linq 语句过滤这些“对”,因此字符串不可转换为 ‘bool 的任何对都将被丢弃; 最后,Linq ToDictionary 用于创建 Dictionary 结构,对于每个 KeyValuePair 的值,使用由 Where 子句中的 ‘TryParse 语句分配给 ‘booltest 的布尔值。

解决方案2

如果您想迭代集合,并且不想使用 foreach 循环,你没有比 for 环形。 这样(我假设 mylist 是一个 IList):

C#
int count = mylist.Count;
string[] result; // This assumes you have an IList<string[]>
for (int i = 0; i < count; i++)
{
   result = mylist[i];
   bool value = Convert.ToBoolean(result[0]);
}

我看不出您使用字符串数组列表来获取布尔值的原因。 显然必须有一个更好/更干净的实现。

希望这可以帮助。 祝你好运。

解决方案3

如果你的意思是 List<T>,你可以使用 List.Contains方法[^]。

C#
List<string> mylist = new List<string>(){"cat","dog","bird"};

var result = mylist.Contains("bird");
Console.WriteLine("A list {0} 'bird' word", result==true ? "contains" : "does not contain");

解决方案5

没有什么奇迹。 如果您使用某种没有循环的方法,则意味着在后台使用了某个循环。 但使用这些方法通常是非常有意义的。 特别参见通用方法 System.Array.ForEach<>

[^]。

-SA

解决方案6

您可以使用 lambda 函数,这就像改进匿名方法一样,使条件更易于阅读:

bool exists = myList.Any(x => Convert.ToBoolean(x) == true);
if (exists) {
    // Do something
}

コメント

タイトルとURLをコピーしました