使用选择和布尔数组过滤字符串数组

本文关键字:数组 过滤 字符串 布尔 选择 | 更新日期: 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();
    }
}