如何在C#winform中以编程方式从数组复制到特定位置的数组
我有两个数组具有这个值 我需要将数据从数组2复制到数组1的空位置,如果它们具有相同的ex编号 我的代码是这样的,但它只将一个ex复制到数组1中的所有null (数据作为数组1,x作为数组2)如何在C#winform中以编程方式从数组复制到特定位置的数组,c#,arrays,winforms,C#,Arrays,Winforms,我有两个数组具有这个值 我需要将数据从数组2复制到数组1的空位置,如果它们具有相同的ex编号 我的代码是这样的,但它只将一个ex复制到数组1中的所有null (数据作为数组1,x作为数组2) for(int q=0;q
for(int q=0;q
根据图像,输出数组似乎在其原始位置包含来自array1的每个项目,并且来自array2的项目被插入空点,但前提是这些项目没有出现在array1中。下面是一个示例算法:
public static String[] Merge(String[] arr1, String[] arr2) {
Hashtable ht = new Hashtable(StringComparer.OrdinalIgnoreCase);
int requiredLength = 0;
foreach (String s in arr1) {
if (s != null) {
ht[s] = s;
requiredLength++;
}
}
foreach (String s in arr2) {
if (s != null && !ht.ContainsKey(s))
requiredLength++;
}
String[] arr3 = new String[requiredLength];
int k = 0;
for (int i = 0; i < arr3.Length; i++) {
String s = (i < arr1.Length ? arr1[i] : null);
if (s == null) {
while (k < arr2.Length) {
if (arr2[k] != null && !ht.ContainsKey(arr2[k])) {
arr3[i] = arr2[k++];
break;
}
k++;
}
}
else
arr3[i] = s;
}
return arr3;
}
公共静态字符串[]合并(字符串[]arr1,字符串[]arr2){
Hashtable ht=新的Hashtable(StringComparer.OrdinalIgnoreCase);
int requiredLength=0;
foreach(arr1中的字符串s){
如果(s!=null){
ht[s]=s;
所需长度++;
}
}
foreach(arr2中的字符串s){
如果(s!=null&!ht.ContainsKey)
所需长度++;
}
字符串[]arr3=新字符串[requiredLength];
int k=0;
for(int i=0;i
对于图片中显示的两个阵列,预期输出是什么?此外,您是否考虑过使用列表
而不是数组?这可能会简化事情。我将数组2修改为列表,因为我不知道其中有多少项和输出应该是这样的--->ex1,绿色,结束,17,最后一个未完成,计数器打开,ex7(抱歉它不是ex7,ex1),红色,绿色,结束,11,最后一个完成,计数器打开,你应该回答你的问题以显示预期的输出应该是什么。不要在评论中添加它。此外,您应该将数组值作为“文本”而不是图片发布。如果必须输入数据,没有人会提供帮助。乍一看,似乎代码行…if(data[q+fin]=“END”)
永远不会为真。字符串区分大小写“END”!=“结束”。我建议您仔细阅读SO部分,因为它显示了SO是如何工作的。该部分可能会有所帮助。此外,你可能会发现SO部分很有用。我更新了图片请查看,很抱歉我是stack over Flow的新手。真的谢谢你的回答对我很有帮助
public static String[] Merge(String[] arr1, String[] arr2) {
Hashtable ht = new Hashtable(StringComparer.OrdinalIgnoreCase);
int requiredLength = 0;
foreach (String s in arr1) {
if (s != null) {
ht[s] = s;
requiredLength++;
}
}
foreach (String s in arr2) {
if (s != null && !ht.ContainsKey(s))
requiredLength++;
}
String[] arr3 = new String[requiredLength];
int k = 0;
for (int i = 0; i < arr3.Length; i++) {
String s = (i < arr1.Length ? arr1[i] : null);
if (s == null) {
while (k < arr2.Length) {
if (arr2[k] != null && !ht.ContainsKey(arr2[k])) {
arr3[i] = arr2[k++];
break;
}
k++;
}
}
else
arr3[i] = s;
}
return arr3;
}