C#是否有一种无循环的方式来编写数组?

时间:2010-07-31 11:51:58

标签: c#

这样的东西
char[] a = new char[] { 'a', 'b', 'c', 'd' };<br>
Console.WriteLine(a);

与C#很好地配合使用。 如果数组的类型是整数,则不再起作用。 它必须编码为

for (int k = 0; k < a.Length; k++) Console.Write(a[k]); Console.WriteLine();

这看起来很蹩脚。有更简洁的方法吗? 例如,某些将WriteLine(a)以无循环方式扩展到

的方法
WriteLine("{0},{1},{2},...,{a.Length-1}", a[0],a[1],a[2],...,a[a.Length-1]);

也许有一些巧妙的Linq技巧?

7 个答案:

答案 0 :(得分:10)

String.Join怎么样? 从.Net Framework 4开始,第二个参数是object[]

  

String.Join Method (String, Object[])

     

使用每个元素之间的指定分隔符连接对象数组的元素。

在Visual Studio 2010中尝试使用针对框架4的代码段:

    int[] a = new int[] {1,2,3,4,5,6,7 };
    Console.WriteLine(String.Join(",", a));

产地:

1,2,3,4,5,6,7

答案 1 :(得分:1)

.Aggregate<TSource, TAccumulate>(source, func)在这种情况下是你的朋友。您可以使用StringBuilder对其进行播种,然后从那里链接“附加”。 StringBuilder类中的大多数成员方法都会将一个实例返回给您传入的StringBuilder,这使它很适合在这些类型的场景中使用。

<强>样本...

var charArray = new[] { 'a', 'b', 'c', 'd' };
var objectArray = new object[] { 'a', "Hello", 1, null };

Console.WriteLine(new string(charArray));
Console.WriteLine(objectArray.Aggregate(
    new StringBuilder(), 
    (sb,v)=>sb.Append(v+" ")));

结果......

abcd
a Hello 1

答案 2 :(得分:0)

因为ToString()方法而有效。毕竟在toString()中有一个循环! 对于任何自定义类,您可以覆盖toString方法。

答案 3 :(得分:0)

我认为你可以使用类似的东西:

a.ForEach(e=>WriteLine(e))

答案 4 :(得分:0)

您可以使用Enumerable。SelectAggregate

var intArray = new[] { 1, 2, 3, 4 };

Console.WriteLine(intArray.Select(i => i.ToString())
                          .Aggregate((acc, item) => acc + "\n" + item));

输出:

1   
2    
3    
4

答案 5 :(得分:0)

Enumerable.Range(0, 100).ToList().ForEach(Console.Write); Console.WriteLine();

ForEach()方法特定于List<T>,但您可以根据需要在IEnumerable<T>上创建自己的扩展方法:

public static class MyExtensions
{
    public static void ForEach<T>(this IEnumerable<T> list, Action<T> action)
    {
       foreach (var item in list) action(item);
    } 
}

现在你可以这样做:

 Enumerable.Range(0, 100).ForEach(Console.Write);

答案 6 :(得分:0)

对OP的要求感到困惑,因为示例代码执行了两个不同的操作。 一个打印:

  

123456

其他印刷品:

  

1,2,3,4,5,6-

如果你想要第二个,请使用gimel的解决方案(使用string.Join)。如果你想要第一个,这是最简单的方法,即使对于C#新手也很容易阅读,甚至可以在C#1.0中使用:

foreach(object k in a)
    Console.Write(k);

为什么过于复杂这么简单的事情?虽然这不是“无循环”,但它与其他部分一样简洁。其余的仍然是循环,它们只是被语法隐藏:)