# Load all rows into memory.
$allRows = Import-Csv file.csv
# Get the *index* of the row with the column value of interest.
# Note: This lookup is case-SENSITIVE.
$rowIndex = $allRows.'Device UUID'.IndexOf('lalala')
# Retrieve the row of interest by index, if found.
($rowOfInterest = if ($rowIndex -ne -1) { $allRows[$rowIndex] })
3条答案
按热度按时间kgqe7b3p1#
将所有100K行加载到哈希表中,使用
Device UUID
属性作为键-这将使查找行比使用.Where({...})
迭代整个数组要快得多:现在,这将花费大大少于1秒的时间:
jtoj6r0c2#
如果您只需要一次或几次查找,您可以考虑以下Mathias R. Jessen's helpful answer的替代方案。请注意,与Mathias的解决方案一样,它需要一次将所有行读取到内存中:
一旦行被加载到内存中(作为
[pscustomobject]
示例,这本身不会很快),数组查找-通过member-access enumeration-相当快,这要归功于*.NET使用System.Array.IndexOf()
方法执行(线性)数组搜索。.Where({ ... })
方法的问题在于多次迭代调用PowerShell*脚本块({ ... }
)的计算代价很高。这可以归结为以下权衡:
[hashtable]
),允许高效查找(Mathias的答案)axr492tv3#
玩着Sqlite贝壳。