【问题标题】:What is the fastest way of converting an array of floats to string? [duplicate]将浮点数组转换为字符串的最快方法是什么? [复制]
【发布时间】:2010-10-20 10:09:00
【问题描述】:

在 C# 中将浮点数数组转换为字符串的最快方法是什么?

如果我的数组包含这个{ 0.1, 1.1, 1.0, 0.2 }

然后我希望将每个条目转换为值由空格分隔的字符串,即"0.1 1.1 1.0 0.2"

【问题讨论】:

  • 你能描述一下你期望的结果吗?
  • “最快”是什么意思?运行时性能(哪个目标?)、更少的代码行、最易读的代码等等......
  • 只需要一些能让我避免循环的东西

标签: c# .net type-conversion


【解决方案1】:

我会选择最易读的string.Join,它在大多数情况下也应该有足够的性能。除非有真正的问题,否则我不会自己运行:

float[] values = { 1.0f, 2.0f, 3.0f };
string s = string.Join(" ", values);

可能是我误读了您的问题,所以如果您想要枚举string,请选择其他答案。

【讨论】:

  • 可能,它只会为数组中的每个元素调用float.ToString()
  • 没有编译。说“加入”有一些无效的参数。
  • @abatishchev:是的,它会,然后它使用字符串构建器来连接元素。如果您需要特定格式,那么您的答案提供了所有可能性。
  • 这个答案是可读的。 “检查”的答案不是。
  • @Wajih:如果您需要它在旧版本的 .NET 中工作,那么只需执行 string s = string.Join(" ", values.Select(f => f.ToString()).ToArray())
【解决方案2】:

更明确地说,手动调用float.ToString(),然后调用string.Join(),用空格分隔每个结果:

var array = new float[] { 0.1, 1.1, 1.0, 0.2 };
string result = String.Join(" ", array.Select(f => f.ToString(CultureInfo.CurrentCulture));

顺便说一句,

在 .NET 2.0/3.0/3.5 中只有一个 String.Join(string, string[])

但在 .NET 4.0 中也有 String.Join<T>(string, IEnumerable<T>)

@0xA3 使用 .NET 4.0 中的方法。我也是。所以对于早期版本使用array.Select(..).ToArray()

【讨论】:

  • 这似乎是最完整的答案。
【解决方案3】:

你可以这样做:

var floatsAsString = yourFloatArray.Select(f => f.ToString(CultureInfo.CurrentCulture));

【讨论】:

    【解决方案4】:
    float[] arr = { 1.0f, 2.1f };
    var str = arr.Select(x => x.ToString()).ToArray();
    

    或使用rray.ConvertAll

    public static string FloatFToString(float f)
    {
        return f.ToString(); 
    }
    
    float[] a = { 1.0f, 2.1f };
    var res = Array.ConvertAll(a, new Converter<float, string>(FloatFToString));
    

    【讨论】:

      【解决方案5】:

      我喜欢使用Enumerable.Aggregate 方法的方法:

      float[] array = new float[] { .1f, .2f, .3f, .4f, .5f };
      string s = array.AsEnumerable().Aggregate<float, string, string>("", (a, e) => a += string.Format(" {0}", e), r => r.Trim());
      

      工作速度很快。

      【讨论】:

      • 老兄,你就是那个人,真的谢谢!!!
      • 使用String.ConcatString.Format肯定是非常低效的
      • @abatishchev 那么,有什么更好的方法呢?
      • 我的方式或@0xA3 的方式,我猜。因为String.Join 在内部使用StringBuilder,因为.NET 中的字符串不可变,所以效率更高。
      • @abatishchev 感谢您提供信息,我不知道 String.Join 在内部使用 StringBuilder。
      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多