使用选择和布尔数组过滤字符串数组
本文关键字:数组 过滤 字符串 布尔 选择 | 更新日期: 2023-09-27 18:30:34
我需要获取字符串数组的所有元素,其中另一个布尔数组中的索引为真。在 c# 中,我正在寻找 Select,但我不知道如何在索引上使用
String[] ContentArray = {"Id","Name","Username"};
bool[] SelectionArray = {false,true,false};
我想你正在寻找:
IEnumerable<string> strings =
ContentArray.Where((str, index) => SelectionArray[index]);
对于您的示例,这将产生一个包含"Name"
的IEnumerable<string>
。
但是,如果您的SelectionArray
短于您的ContentArray
,您将获得索引越界异常。
如果可能的话,你可以简单地添加一个长度检查,假设你想要一个大于SelectionArray
长度的索引来返回false
:
IEnumerable<string> strings =
ContentArray.Where(
(str, index) => index < SelectionArray.Length && SelectionArray[index]);
你也可以
使用IEnumerable.Zip()
。下面是一个示例:
class Program
{
static void Main(string[] args)
{
String[] ContentArray = { "Id", "Name", "Username" };
bool[] SelectionArray = { false, true, false };
var selected = ContentArray.Zip(SelectionArray, (s, b) =>
new Tuple<string, bool>(s, b))
.Where(tuple => tuple.Item2)
.Select(tuple => tuple.Item1)
.ToList();
foreach (var s in selected)
{
Console.WriteLine(s);
}
Console.ReadLine();
}
}