我的问题与 C# 中相同的多个数组值有关。 由于念珠有五个十年,我想将值设置为“arr[1,2,...10, 14,16,...23] =“万福玛丽”;”我可以将每个值写在字符串数组中,但感觉减少代码的大小将使程序更有效地限制其大小。大多数涉及重复值的问题往往会被要求避免这种情况,但这涉及不同的情况和不同的类型,例如 int。我的正好相反,我使用字符串并希望在多个索引号中重复相同的值。我认为可以有多种用途,例如 Windows 窗体程序向用户重复逐步说明,以遵循可能显示重复的字符串值。
1)有没有一种方法可以编写具有多个相同值的数组,或者我只是像我的示例那样写出每个值?
2)如果使用
string[] arr={"Our Father", "Hail Mary", "Hail Mary",..., "Glory Be", "O My Jesus"};
而不是我声明每个索引字符串值的示例,那么如何编码以在声明的字符串数组中插入相同的值?
int counter=0;
private void button1_Click(Object sender, EventArgs e)
{ string[] arr= new string[12];
arr[0]="Our Father...";
arr[1]="Hail Mary...";
arr[2]="Hail Mary...";
...
arr[11]="Glory Be...";
arr[12]="O My Jesus...";
textBox1.Text = arr[counter];
counter++;
textBox1.Text = arr[counter-1].ToString();
}
为此使用
Enumerable.Repeat
方法
var array = Enumerable.Repeat("Hail Mary", count).ToArray();
这将创建一个
count
项目数组,其中每个项目都等于“Hail Mary”。然后只需将不同的值放在应该的位置即可。
array[0] = "Our Father";
有关此方法的更多信息,请查看 MSDN。
您可以使用
switch
语句来达到此目的:
string[] arr= new string[23];
for (int i = 0; i < arr.Length; i++) {
switch (i) {
case 0:
array[i] = "Our Father...";
break;
case 11:
arr[11]="Glory Be...";
break;
case 11:
arr[12]="O My Jesus...";
break;
default:
array[i] = "Hail Mary";
break;
}
}
意思是最常见的条目是
"Hail Mary"
,您将其作为默认情况并单独处理其余情况。
另请注意,我使用
arr.Length
而不仅仅是数字;我建议您始终这样做,作为一种良好的做法(不要一遍又一遍地重复相同的常量)。
string[] arr = { "Our Father", "Hail Mary", "Hail Mary", "Glory Be", "O My Jesus" };
var list = arr.ToList();
list.Insert(2, "Hail Mary");
arr = list.ToArray();
另一个答案,你可以使用第二个
array
和foreach
循环
int[] index = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
string[] arr = new string[13];
foreach (int i in index)
{
arr[i] = "Hail Mary...";
}
arr[0] = "Our Father...";
arr[11] = "Glory Be...";
arr[12] = "O My Jesus...";
也许您可以为您的场景编写一个简单的方法:
public void SetValues(int start, int end, string value, ref string[] array)
{
for(int i = start; i <= end; i++)
{
array[i] = value;
}
}
并使用:
SetValues(1, 12, "Hail Mary...", ref arr)
不需要使事情过于复杂,只需将值分配给字符串变量,然后在声明数组时使用它即可。通过某种方式减少源代码的大小或使用填充数组的“聪明”方法,您不会获得任何性能提升。如果有数千个或更多的地方需要放置重复的字符串,您可能会获得几毫秒的时间,但您会失去对正在做的事情的清晰度。
因此,对于问题的第二部分,您可以这样声明数组:
string repeatedString = "I'm repeating";
string[] arr =
{
"Value 1",
"Another string",
repeatedString,
"some more",
repeatedString,
repeatedString,
"Yet another"
};