【问题标题】:Neat code to convert bool[] -> "false, true, true, false"转换 bool[] -> "false, true, true, false" 的简洁代码
【发布时间】:2010-02-16 12:56:23
【问题描述】:

如何使用尽可能少的代码行将布尔数组转换为“假、真、真、假”之类的字符串?

Python 允许我使用以下内容(非常漂亮和干净):

", ".join(map(str, [False, True, True, False]))

在 C# 中,string.Join 只允许我加入字符串数组。

那么在 C# 中做同样事情的捷径是什么?

【问题讨论】:

    标签: c# string arrays


    【解决方案1】:
    var array = new[] { true, false, false };
    var result = string.Join(", ", array.Select(b => b.ToString()).ToArray());
    Console.WriteLine(result);
    

    【讨论】:

      【解决方案2】:

      怎么样:

      String.Join(", ", new List<Boolean>() { true, false, false, true }.ConvertAll(x => x.ToString()).ToArray())
      

      【讨论】:

      • 这会抛出一个InvalidCastException
      • 指定元素时可以去掉new List&lt;Boolean&gt;后面的()
      • 如果他已经有一个列表也没关系,但是问题指定了一个数组。要在这种情况下使用 ConvertAll,您首先必须从数组中构造列表,然后进行转换。 LINQ Select 在这两种情况下都有效。
      • @tvanfosson...公平地说,将数组转换为列表很容易,例如新列表(MyArrayOfBool)。但是,我确实同意在这种情况下选择 Select 是可行的方法。
      • @James - 但请注意,创建列表需要多 50% 的存储空间(峰值时原始数量的 3 倍),然后进行转换并最终得到转换后的元素确实使用Select
      【解决方案3】:
      arrayOfBools.Select(x => x.ToString()).Aggregate((x, y) => x + ", " + y)
      

      【讨论】:

        【解决方案4】:

        如果您使用的是 .NET 4,以下行就足够了,因为String.Join&lt;T&gt; 在内部为每个项目调用了ToString() 方法。

        Console.WriteLine(string.Join(", ", new[] { false, true, true, false }));
        
        >>>> False, True, True, False
        

        【讨论】:

          【解决方案5】:
          var boolStrings = string.Join(",", new List<bool> { false, true, true, false }
                .ConvertAll(x => x.ToString()).ToArray());
          

          【讨论】:

            【解决方案6】:
             var str = string.Join(", ", new List<Boolean>() {false, true, false}.ToArray());
             Console.WriteLine(str.ToString());
            

            【讨论】:

              【解决方案7】:

              类似

              var s = from item in blnArray select item.Tostring();
              

              然后使用可枚举的s来填充字符串数组?

              没有实际测试过 - 如果我被要求查看它,我可能会这样处理它......

              【讨论】:

                【解决方案8】:
                var bools = new bool[] {false, true, true, false};
                var strings = bools.Aggregate((x,y) => x.ToString()+","+y.ToString());
                

                【讨论】:

                • 似乎不起作用,因为 lambda 返回值必须是布尔值。
                猜你喜欢
                • 2012-10-29
                • 2011-12-16
                • 2022-01-07
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-06-27
                • 2021-12-19
                相关资源
                最近更新 更多