【问题标题】:Concat bits into one string将位连接成一个字符串
【发布时间】:2013-06-24 16:54:54
【问题描述】:

我想将一些位合并为一个。我有这个方法:

public BitArray Encode(string source)
{
    List<bool> encodedSource = new List<bool>();

    for (int i = 0; i < source.Length; i++)
    {
        List<bool> encodedSymbol = this.Root.Traverse(source[i], new List<bool>());
        encodedSource.AddRange(encodedSymbol);
    }

    BitArray bits = new BitArray(encodedSource.ToArray());

    return bits;
}

它返回 0/1 二进制位,现在我有这段代码可以显示输出:

foreach (bool bit in encoded)
{
    MessageBox.Show((bit ? 1 : 0) + "");
}

现在我只是为每个位显示一个 MessageBox,但是我怎样才能将所有位连接到一个 MessageBox 中,这可能是一个愚蠢的问题,但我无法理解它。

【问题讨论】:

    标签: c# string concat


    【解决方案1】:
    var bitString = string.Concat(encoded.Select(bit => bit ? "1" : "0"))
    

    【讨论】:

      【解决方案2】:

      这显示了您需要做什么:

      它基本上是遍历所有条目,并根据条目将“1”或“0”添加到列表中。

          public static string ConcatList(List<bool> list)
          {
              StringBuilder builder = new StringBuilder();
              foreach (bool b in list)
              {
                  builder.Append(b == true ? "1" : "0";
              }
              return builder.ToString();
          }
      

      【讨论】:

        【解决方案3】:

        使用 StringBuilder

        StringBuilder tmp = new StringBuilder(encoded.Count)
        foreach (bool bit in encoded)
        {
            tmp.Append(bit ?"1": "0"));
        }
        MessageBox.Show(tmp.ToString());
        

        【讨论】:

          【解决方案4】:

          这是BitArray 上的扩展方法,应该可以解决问题:

          public static class BitArrayExtensions
          {
              public static string ToBitString(this BitArray encoded)
              {
                  if (encoded == null)
                  {
                      return string.Empty;
                  }
          
                  var sb = new StringBuilder(encoded.Count);
          
                  foreach (bool bit in encoded)
                  {
                      sb.Append(bit ? "1" : "0");
                  }
          
                  return sb.ToString();
              }
          }
          

          在您的代码中这样使用:

          MessageBox.Show(encoded.ToBitString());
          

          【讨论】:

            【解决方案5】:

            我的建议:

            string bitString = string.Empty;
            foreach (bool bit in encodedSource)
            {
              bitString = string.Concat(bitString, (bit ? "1" : "0"));
            }
            

            【讨论】:

            • 所有字符串连接的潜在性能问题。 StringBuilder 的其他答案避免了这种情况。
            猜你喜欢
            • 2013-05-15
            • 2012-02-02
            • 1970-01-01
            • 2022-12-17
            • 2015-05-02
            • 1970-01-01
            • 1970-01-01
            • 2017-05-14
            • 2014-03-15
            相关资源
            最近更新 更多