我试图在调用一些改变它的方法后打印出数组的内容,在Java中我使用:
System.out.print(Arrays.toString(alg.id));
我如何在c#中执行此操作?
答案 0 :(得分:96)
你可以试试这个:
foreach(var item in yourArray)
{
Console.WriteLine(item.ToString());
}
你也可以尝试这样的事情:
yourArray.ToList().ForEach(i => Console.WriteLine(i.ToString()));
编辑:或者根据评论中的建议:
yourArray.ToList().ForEach(Console.WriteLine);
编辑:根据您的评论在一行中输出:
Console.WriteLine("[{0}]", string.Join(", ", yourArray));
//output style: [8, 1, 8, 8, 4, 8, 6, 8, 8, 8]
答案 1 :(得分:35)
有很多方法可以做到,其他答案都很好,这是另一种选择:
Console.WriteLine(string.Join("\n", myArrayOfObjects));
答案 2 :(得分:9)
最简单的例如如果你有一个字符串数组声明像这个字符串[] myStringArray = new string [];
Console.WriteLine("Array : ");
Console.WriteLine("[{0}]", string.Join(", ", myStringArray));
答案 3 :(得分:4)
由于工作中有一些停机时间,我决定测试这里发布的不同方法的速度。
这是我使用的四种方法。
static void Print1(string[] toPrint)
{
foreach(string s in toPrint)
{
Console.Write(s);
}
}
static void Print2(string[] toPrint)
{
toPrint.ToList().ForEach(Console.Write);
}
static void Print3(string[] toPrint)
{
Console.WriteLine(string.Join("", toPrint));
}
static void Print4(string[] toPrint)
{
Array.ForEach(toPrint, Console.Write);
}
结果如下:
Strings per trial: 10000
Number of Trials: 100
Total Time Taken to complete: 00:01:20.5004836
Print1 Average: 484.37ms
Print2 Average: 246.29ms
Print3 Average: 70.57ms
Print4 Average: 233.81ms
所以Print3是最快的,因为它只有一次调用Console.WriteLine
,这似乎是打印阵列速度的主要瓶颈。 Print4略快于Print2,Print1是最慢的。
我认为Print4可能是我测试的4中最通用的,尽管Print3更快。
如果我发现任何错误,请随时告诉我/自行解决问题!
编辑:我在
下添加生成的ILg__Print10_0://Print1
IL_0000: ldarg.0
IL_0001: stloc.0
IL_0002: ldc.i4.0
IL_0003: stloc.1
IL_0004: br.s IL_0012
IL_0006: ldloc.0
IL_0007: ldloc.1
IL_0008: ldelem.ref
IL_0009: call System.Console.Write
IL_000E: ldloc.1
IL_000F: ldc.i4.1
IL_0010: add
IL_0011: stloc.1
IL_0012: ldloc.1
IL_0013: ldloc.0
IL_0014: ldlen
IL_0015: conv.i4
IL_0016: blt.s IL_0006
IL_0018: ret
g__Print20_1://Print2
IL_0000: ldarg.0
IL_0001: call System.Linq.Enumerable.ToList<String>
IL_0006: ldnull
IL_0007: ldftn System.Console.Write
IL_000D: newobj System.Action<System.String>..ctor
IL_0012: callvirt System.Collections.Generic.List<System.String>.ForEach
IL_0017: ret
g__Print30_2://Print3
IL_0000: ldstr ""
IL_0005: ldarg.0
IL_0006: call System.String.Join
IL_000B: call System.Console.WriteLine
IL_0010: ret
g__Print40_3://Print4
IL_0000: ldarg.0
IL_0001: ldnull
IL_0002: ldftn System.Console.Write
IL_0008: newobj System.Action<System.String>..ctor
IL_000D: call System.Array.ForEach<String>
IL_0012: ret
答案 4 :(得分:3)
在C#中,您可以遍历打印每个元素的阵列。请注意,System.Object定义了ToString()方法。从System.Object()派生的任何给定类型都可以覆盖它。
返回表示当前对象的字符串。
http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx
默认情况下,将打印对象的完整类型名称,但许多内置类型会覆盖该默认值以打印更有意义的结果。您可以在自己的对象中覆盖ToString()以提供有意义的输出。
foreach (var item in myArray)
{
Console.WriteLine(item.ToString()); // Assumes a console application
}
如果您有自己的类Foo,则可以覆盖ToString(),如:
public class Foo
{
public override string ToString()
{
return "This is a formatted specific for the class Foo.";
}
}
答案 5 :(得分:2)
使用Array.ForEach<T> Method (T[], Action<T>)
类
Array
方法的另一种方法
Array.ForEach(myArray, Console.WriteLine);
与array.ToList().ForEach(Console.WriteLine)
相比只需要一次迭代,这需要两次迭代,并在内部为List
创建第二个数组(双重迭代运行时和双内存消耗)
答案 6 :(得分:1)
如果你想变得可爱,你可以编写一个扩展方法,将IEnumerable<object>
序列写入控制台。这适用于任何类型的枚举,因为IEnumerable<T>
在T:
using System;
using System.Collections.Generic;
namespace Demo
{
internal static class Program
{
private static void Main(string[] args)
{
string[] array = new []{"One", "Two", "Three", "Four"};
array.Print();
Console.WriteLine();
object[] objArray = new object[] {"One", 2, 3.3, TimeSpan.FromDays(4), '5', 6.6f, 7.7m};
objArray.Print();
}
}
public static class MyEnumerableExt
{
public static void Print(this IEnumerable<object> @this)
{
foreach (var obj in @this)
Console.WriteLine(obj);
}
}
}
(我认为你不会在测试代码中使用它。)
答案 7 :(得分:1)
从 C#6.0 开始,引入 $ -字符串插值后,还有另一种方法:
var array = new[] { "A", "B", "C" };
Console.WriteLine($"{string.Join(", ", array}");
//output
A, B, C
可以使用System.Linq
存档串联,将string[]
转换为char[]
并打印为string
var array = new[] { "A", "B", "C" };
Console.WriteLine($"{new String(array.SelectMany(_ => _).ToArray())}");
//output
ABC
答案 8 :(得分:0)
我赞成Matthew Watson的扩展方法答案,但是如果您从Python迁移/访问,您可能会发现这样的方法很有用:
class Utils
{
static void dump<T>(IEnumerable<T> list, string glue="\n")
{
Console.WriteLine(string.Join(glue, list.Select(x => x.ToString())));
}
}
- &GT;这将使用提供的分隔符打印任何集合。它是非常有限的(嵌套集合?)。
对于一个脚本(即只包含Program.cs的C#控制台应用程序,大多数事情都发生在Program.Main
中) - 这可能没问题。
答案 9 :(得分:0)
这是使用数组打印String的最简单方法!!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace arraypracticeforstring
{
class Program
{
static void Main(string[] args)
{
string[] arr = new string[3] { "Snehal", "Janki", "Thakkar" };
foreach (string item in arr)
{
Console.WriteLine(item.ToString());
}
Console.ReadLine();
}
}
}
答案 10 :(得分:0)
如果您不想使用Array函数。
public class GArray
{
int[] mainArray;
int index;
int i = 0;
public GArray()
{
index = 0;
mainArray = new int[4];
}
public void add(int addValue)
{
if (index == mainArray.Length)
{
int newSize = index * 2;
int[] temp = new int[newSize];
for (int i = 0; i < mainArray.Length; i++)
{
temp[i] = mainArray[i];
}
mainArray = temp;
}
mainArray[index] = addValue;
index++;
}
public void print()
{
for (int i = 0; i < index; i++)
{
Console.WriteLine(mainArray[i]);
}
}
}
class Program
{
static void Main(string[] args)
{
GArray myArray = new GArray();
myArray.add(1);
myArray.add(2);
myArray.add(3);
myArray.add(4);
myArray.add(5);
myArray.add(6);
myArray.print();
Console.ReadKey();
}
}
答案 11 :(得分:0)
如果它是字符串数组,则可以使用Aggregate
var array = new string[] { "A", "B", "C", "D"};
Console.WriteLine(array.Aggregate((result, next) => $"{result}, {next}")); // A, B, C, D
那样,您可以通过更改参数的顺序来反转顺序
Console.WriteLine(array.Aggregate((result, next) => $"{next}, {result}")); // D, C, B, A
答案 12 :(得分:0)
您可以使用for循环
import React from "react";
import { useMediaQuery } from "react-responsive";
export default function Logo() {
const isDesktop = useMediaQuery({
query: '(min-aspect-ratio: 1/1)'
});
let logo = {};
if (isDesktop) {
logo = {
position: "absolute",
left: "42vw",
bottom: "calc(50vh + 4vw)",
height: "16vw"
};
} else {
logo = {
position: "absolute",
left: "38vw",
bottom: "calc(50vh + 6vw)",
height: "24vw",
};
};
return (
<img
alt=""
style={logo}
src="../logo.png"
/>
);
};