如何重新排列列表索引
Posted
技术标签:
【中文标题】如何重新排列列表索引【英文标题】:How can I rearrange list indexing 【发布时间】:2021-12-24 02:43:28 【问题描述】:我正在处理谷歌电子表格,用户连接其电子表格,系统在一天结束时将数据推送到用户连接的电子表格。
这是电子表格列
列的顺序是
"PatientName","DOB","StripeId","Card","ChargeCreated","Status","Amount"
这是使用的代码
var GoogleSpreadSheetData = db.GoogleSpreadSheetDatas
.ToList()
.Select(x => new List<string>
x.PatientName.Trim(),
x.DOB.Trim(),
x.StripeId.Trim(),
x.Card.Trim(),
x.ChargeCreated.Trim(),
x.Status.Trim(),
x.Amount.Trim(),
)
.ToList();
谷歌电子表格列的顺序和查询返回的顺序相同
"PatientName","DOB","StripeId","Card","ChargeCreated","Status","Amount"
并且数据将映射到电子表格Reference image 中的确切列。
如果用户像image 这样更改列的顺序,则将PatientName
列替换为DOB
。当下次数据推送到电子表格时,PatientName
数据被推送到 DOB
列中,反之亦然。
在将数据推送到电子表格之前,首先我调用 google API(使用开发人员元数据)来获取该电子表格的序列,我得到了更新的列序列作为响应。
My question is
如何更改查询选择的顺序? 我可以在查询选择或之后重新排列列表吗?
请帮助解决这个问题。 谢谢。
【问题讨论】:
我们现在已经在这里讨论过了:***.com/questions/69930298/… 您的问题需要详细说明,您使用哪种API方法?您如何为 API 准备数据? 我认为您在数据库查询中不应该需要您的第一个ToList()
。
【参考方案1】:
假设您的元数据查询为您提供了 List<string>
的列名:
List<string> spreadsheetColSeq;
然后您可以查询数据库以检索行:
var dbData = db.GoogleSpreadSheetDatas
.Select(x => new List<string>
x.PatientName.Trim(),
x.DOB.Trim(),
x.StripeId.Trim(),
x.Card.Trim(),
x.ChargeCreated.Trim(),
x.Status.Trim(),
x.Amount.Trim(),
)
.ToList();
然后您可以创建从查询顺序到电子表格顺序的映射,并对每一行的List<string>
重新排序以匹配新顺序:
var origSeq = new[] "PatientName", "DOB", "StripeId", "Card", "ChargeCreated", "Status", "Amount" ;
var colOrder = spreadsheetColSeq
.Select(colName => Array.IndexOf(origSeq, colName))
.ToList();
var GoogleSpreadSheetData = dbData
.Select(row => colOrder.Select(idx => row[idx]).ToList())
.ToList();
注意:如果列可能被删除,这将崩溃,因为 Array.IndexOf
将返回 -1
以获取缺失值。您可以通过在ToList()
之前添加.Where(idx => idx > -1)
来过滤colOrder
以跳过缺失的列。
【讨论】:
以上是关于如何重新排列列表索引的主要内容,如果未能解决你的问题,请参考以下文章
在 WPF 中重新排列列表框项目(如 Windows 8 开始屏幕磁贴)
如何在不重新索引的情况下将项目添加到 laravel 列表集合中?