[ad_1]
如何在不使用 foreach 的情况下检查列表中项目的条件。 例如,不必这样做:
foreach(string[] item in mylist) { if(Convert.ToBoolean(item[0]){} }
我可以直接访问我的列表的项目。 我怎样才能实现这个目标?
谢谢!
解决方案4
首先,您无法找到列表中与条件匹配的第一项,或者, 全部 列表中的项目与某些条件匹配但不 迭代:使用 Linq 只会为您“自动化”。
这里需要你澄清的问题到底是什么 你要 从字符串列表的迭代中返回:
1. 列表中可转换为布尔值的字符串的索引列表?
2. 或者,只是列表中的一堆布尔值:如果没有索引,很难想象它的用途。
3.或者,对每个可以根据布尔值和/或该值在字符串列表中的索引转换为布尔值的字符串采取一些操作(执行一些代码)? 恕我直言,一个更合理的用例。
4.请参阅我对您上面帖子的评论,了解您还需要澄清的内容
我将在这里向您展示一个以 Dictionary
// 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
):
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方法[^]。
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<>
:
解决方案6
您可以使用 lambda 函数,这就像改进匿名方法一样,使条件更易于阅读:
bool exists = myList.Any(x => Convert.ToBoolean(x) == true); if (exists) { // Do something }
[ad_2]
コメント