您将如何比较两个列表,并说如果这两个列表具有相等的值,则获取两个不同点的索引,并从该索引处的两个不同列表中吐出另外两个列表值。两个列表具有相等的值,应该比较的两个列表中都包含ID,其他两个应该写出值的列表中都包含categoryNames。我的代码看起来像这样...
document/raw:/storage/emulated/0/Download/Question_Bank/26_9_day_CSE_summer_final_2018_Wireless Programming.pdf (No such file or directory)
TestCode
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Excel;
namespace PrestaConverter
{
public class ExcellCreation
{
#region privata variabler
/// <summary>
/// WhatExcelFile Håller reda på Vilken excelfil som ska sparas,
/// Name Namnet på sparfilen,
/// count är en räknare som ger id till Kategorierna
/// </summary>
Hashtable myHashtable = new Hashtable();
private int WhatExcellFile;
private string name = "CategoriesCatalog";
private List<string> ColumnNames = new List<string>() {"ID",
"Active(0/1)",
"Name*",
"Parent Category",
"Root Category(0/1)",
"Description",
"Meta title",
"Meta keywords",
"Meta description",
"URL rewritten",
"Image URL"
};
private Categories categories1 = new Categories();
private Categories categories2 = new Categories();
private Categories categories3 = new Categories();
private int count;
ExcelConverter converter = new ExcelConverter();
#endregion
#region Skapa excel
/// <summary>
/// Funktion som skapar de nya Excelfilerna
/// </summary>
/// <param name="excelValue">Kategorinamnen sänds över till denna funktion för upplägg i ny fil</param>
/// <param name="rowAmmount">Används till att få tag på hur många rader som ska existera i excel filen</param>
/// <returns></returns>
public string CreateExcel(List<Categories> categories)
{
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
return "Excel är inte korrekt installerat";
}
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
categories1 = categories[0];
categories2 = categories[1];
categories3 = categories[2];
for(int i = 0; i < categories1.CategoryId.Count; i++)
{
if(categories1.NewCategoryId.Contains(categories1.CategoryId[i]) == false && categories1.CategoryId[i].Substring(3,4) == "0000")
{
categories1.NewCategoryId.Add(categories1.CategoryId[i]);
categories1.NewCategoryName.Add(categories1.CategoryName[i]);
}
}
Console.WriteLine(categories1.NewCategoryId.Count);
for(int i = 0; i < ColumnNames.Count; i++)
{
xlWorkSheet.Cells[1, i + 1].Value2 = ColumnNames[i];
}
for(int i = 0; i < categories1.NewCategoryId.Count; i++)
{
xlWorkSheet.Cells[2 + i , 3].Value2 = categories1.NewCategoryName[i];
xlWorkSheet.Cells[2 + i, 4].Value2 = "Home";
}
for(int i = 0; i < categories2.CategoryId.Count; i++)
{
if(categories2.NewCategoryId.Contains(categories2.CategoryId[i]) == false && categories2.CategoryId[i].Substring(5, 2) == "00")
{
categories2.NewCategoryId.Add(categories2.CategoryId[i]);
categories2.NewCategoryName.Add(categories2.CategoryName[i]);
}
}
Console.WriteLine(categories2.NewCategoryName.Count);
for(int i = 0; i < categories1.NewCategoryId.Count; i++)
{
for(int j = 0; j < categories2.NewCategoryId.Count; j++)
{
if(categories1.NewCategoryId[i].Substring(0,3) == categories2.NewCategoryId[j].Substring(0, 3))
{
categories2.parentCategoryId.Add(categories1.NewCategoryId[i]);
categories2.parentCategoryName.Add(categories1.NewCategoryName[i]);
}
}
}
for(int i = 0; i < categories2.parentCategoryId.Count; i++)
{
xlWorkSheet.Cells[categories1.NewCategoryId.Count + i, 4].Value2 = categories2.parentCategoryName[i];
}
for(int i = 0; i < categories2.NewCategoryName.Count; i++)
{
xlWorkSheet.Cells[categories1.NewCategoryId.Count + i, 3].Value2 = categories2.NewCategoryName[i];
}
//Here saving the file in xlsx
xlWorkBook.SaveAs(@"C:\Users\Jens Svensson\Documents\" + name + ".xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, misValue,
misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true);
xlApp.Quit();
return "Funkar";
}
#endregion
private string createId(string Id, int start, int end)
{
return Id.Substring(start, end);
}
}
}
这是我想得到的结果,但我只是让他们陷入混乱,所以该怎么做?
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用.Intersect()
检索匹配的元素,然后使用.IndexOf()
获取索引。最后,访问其他列表的索引值。
var list1 = new List<int> { 1, 2, 3, 4, 5 };
var list2 = new List<int> { 4, 5, 6, 7, 8 };
var intersectingValues = list1.Intersect(list2); // 4, 5
var interesectingValueIndexes = intersectingValues.Select(x =>
new { I1 = list1.IndexOf(x), I2 = list2.IndexOf(x) });
var otherList1 = new List<string> { "a", "b", "c", "d", "e" };
var otherList2 = new List<string> { "f", "g", "h", "i", "j" };
var otherListIndexValues = interesectingValueIndexes.Select(x =>
new { V1 = otherList1[x.I1], V2 = otherList2[x.I2] });
答案 2 :(得分:0)
您可以从一个列表中创建一个Dictionary<T, int[]>
,例如从list2
中创建一个>
using System.Linq;
...
var list1 = ...
var list2 = ...
var dict = list2
.Select((value, index) => new {value, index})
.GroupBy(pair => pair.value, pair => pair.index)
.ToDictionary(group => group.Key, group => group.ToArray());
现在,借助dict.TryGetValue
,您可以获得在int[]
中出现所需值的所有list2
索引,例如
foreach (var item in list1) {
if (dict.TryGetValue(item, out int[] indexes)) {
// item appears in list2 at indexes
Console.WriteLine($"value {item} appears at [{string.Join(", ", indexes)}]");
}
else {
// item is not found in list2
}
}
演示:
var list1 = new List<string>() {"A", "B", "C", "D", "E"};
var list2 = new List<string>() {"A", "B", "A", "A", "C", "B", "D"};
var dict = list2
.Select((value, index) => new {value, index})
.GroupBy(pair => pair.value, pair => pair.index)
.ToDictionary(group => group.Key, group => group.ToArray());
for (int i = 0; i < list1.Count; ++i) {
var item = list1[i];
if (dict.TryGetValue(item, out int[] indexes))
Console.WriteLine(
$"value {item} at {index} appears in list2 at [{string.Join(", ", indexes)}]");
else
Console.WriteLine($"value {item} at {index} doesn't appear in list2");
}
结果:
value A at 0 appears in list2 at [0, 2, 3]
value B at 1 appears in list2 at [1, 5]
value C at 2 appears in list2 at [4]
value D at 3 appears in list2 at [6]
value E at 4 doesn't appear in list2