如何重新排列列表索引

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&lt;string&gt; 的列名:

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&lt;string&gt; 重新排序以匹配新顺序:

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 =&gt; idx &gt; -1) 来过滤colOrder 以跳过缺失的列。

【讨论】:

以上是关于如何重新排列列表索引的主要内容,如果未能解决你的问题,请参考以下文章

如何根据优先级重新排列列表视图中的项目?

在 WPF 中重新排列列表框项目(如 Windows 8 开始屏幕磁贴)

如何在不重新索引的情况下将项目添加到 laravel 列表集合中?

如何通过拖动在SwiftUI ZStack中重新排列视图

如何重新排列 UILocalNotification 表格视图的单元格?

如何在 Wordpress 中列出和重新排列或操作 Gutenberg 块类别