Make SortedKeys an array for both

This commit is contained in:
Matt Nadareski
2025-01-14 15:59:47 -05:00
parent 616aea983b
commit 60d946fc6d
10 changed files with 38 additions and 82 deletions

View File

@@ -191,13 +191,12 @@ namespace SabreTools.DatFiles
/// <remarks>Applies to <see cref="Items"/></remarks>
private void ExecuteFiltersImpl(FilterRunner filterRunner)
{
List<string> keys = [.. Items.SortedKeys];
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(Items.SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(keys, key =>
Parallel.ForEach(Items.SortedKeys, key =>
#else
foreach (var key in keys)
foreach (var key in Items.SortedKeys)
#endif
{
ExecuteFilterOnBucket(filterRunner, key);

View File

@@ -240,10 +240,7 @@ namespace SabreTools.DatFiles
/// </remarks>
private void AddItemsFromChildrenImpl(bool subfolder, bool skipDedup)
{
List<string> buckets = [.. Items.SortedKeys];
buckets.Sort();
foreach (string bucket in buckets)
foreach (string bucket in Items.SortedKeys)
{
// If the bucket has no items in it
List<DatItem> items = GetItemsForBucket(bucket);
@@ -503,10 +500,7 @@ namespace SabreTools.DatFiles
/// </remarks>
private void AddItemsFromCloneOfParentImpl()
{
List<string> buckets = [.. Items.SortedKeys];
buckets.Sort();
foreach (string bucket in buckets)
foreach (string bucket in Items.SortedKeys)
{
// If the bucket has no items in it
List<DatItem> items = GetItemsForBucket(bucket);
@@ -625,10 +619,7 @@ namespace SabreTools.DatFiles
private bool AddItemsFromDevicesImpl(bool deviceOnly, bool useSlotOptions)
{
bool foundnew = false;
List<string> buckets = [.. Items.SortedKeys];
buckets.Sort();
foreach (string bucket in buckets)
foreach (string bucket in Items.SortedKeys)
{
// If the bucket doesn't have items
List<DatItem> datItems = GetItemsForBucket(bucket);
@@ -937,10 +928,7 @@ namespace SabreTools.DatFiles
/// </remarks>
private void AddItemsFromRomOfParentImpl()
{
List<string> buckets = [.. Items.SortedKeys];
buckets.Sort();
foreach (string bucket in buckets)
foreach (string bucket in Items.SortedKeys)
{
// If the bucket has no items in it
List<DatItem> items = GetItemsForBucket(bucket);
@@ -1023,10 +1011,7 @@ namespace SabreTools.DatFiles
/// </remarks>
private void RemoveBiosAndDeviceSetsImpl()
{
List<string> buckets = [.. Items.SortedKeys];
buckets.Sort();
foreach (string bucket in buckets)
foreach (string bucket in Items.SortedKeys)
{
// If the bucket has no items in it
List<DatItem> items = GetItemsForBucket(bucket);
@@ -1093,10 +1078,7 @@ namespace SabreTools.DatFiles
/// </remarks>
private void RemoveItemsFromCloneOfChildImpl()
{
List<string> buckets = [.. Items.SortedKeys];
buckets.Sort();
foreach (string bucket in buckets)
foreach (string bucket in Items.SortedKeys)
{
// If the bucket has no items in it
List<DatItem> items = GetItemsForBucket(bucket);
@@ -1200,10 +1182,7 @@ namespace SabreTools.DatFiles
private void RemoveItemsFromRomOfChildImpl()
{
// Loop through the romof tags
List<string> buckets = [.. Items.SortedKeys];
buckets.Sort();
foreach (string bucket in buckets)
foreach (string bucket in Items.SortedKeys)
{
// If the bucket has no items in it
List<DatItem> items = GetItemsForBucket(bucket);
@@ -1281,10 +1260,7 @@ namespace SabreTools.DatFiles
/// <remarks>Applies to <see cref="Items"/></remarks>
private void RemoveMachineRelationshipTagsImpl()
{
List<string> buckets = [.. Items.SortedKeys];
buckets.Sort();
foreach (string bucket in buckets)
foreach (string bucket in Items.SortedKeys)
{
// If the bucket has no items in it
var items = GetItemsForBucket(bucket);

View File

@@ -311,13 +311,12 @@ namespace SabreTools.DatFiles
/// <param name="inputs">List of inputs to use for renaming</param>
public static void ApplySuperDAT(DatFile datFile, List<ParentablePath> inputs)
{
List<string> keys = [.. datFile.Items.SortedKeys];
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(keys, key =>
Parallel.ForEach(datFile.Items.SortedKeys, key =>
#else
foreach (var key in keys)
foreach (var key in datFile.Items.SortedKeys)
#endif
{
List<DatItem>? items = datFile.GetItemsForBucket(key);
@@ -685,13 +684,12 @@ namespace SabreTools.DatFiles
intDat.BucketBy(ItemKey.CRC, DedupeType.Full);
// Then we compare against the base DAT
List<string> keys = [.. intDat.Items.SortedKeys];
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(intDat.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(keys, key =>
Parallel.ForEach(intDat.Items.SortedKeys, key =>
#else
foreach (var key in keys)
foreach (var key in intDat.Items.SortedKeys)
#endif
{
// Game Against uses game names
@@ -1522,8 +1520,7 @@ namespace SabreTools.DatFiles
private static void AddFromExisting(DatFile addTo, DatFile addFrom, bool delete = false)
{
// Get the list of keys from the DAT
List<string> keys = [.. addFrom.Items.SortedKeys];
foreach (string key in keys)
foreach (string key in addFrom.Items.SortedKeys)
{
// Add everything from the key to the internal DAT
addFrom.GetItemsForBucket(key).ForEach(item => addTo.AddItem(item, statsOnly: false));

View File

@@ -50,29 +50,23 @@ namespace SabreTools.DatFiles
#endregion
#region Publically available fields
#region Keys
#region Fields
/// <summary>
/// Get the keys in sorted order from the file dictionary
/// </summary>
/// <returns>List of the keys in sorted order</returns>
[JsonIgnore, XmlIgnore]
public List<string> SortedKeys
public string[] SortedKeys
{
get
{
List<string> keys = [.. _items.Keys];
keys.Sort(new NaturalComparer());
return keys;
return [.. keys];
}
}
#endregion
#region Statistics
/// <summary>
/// DAT statistics
/// </summary>
@@ -81,8 +75,6 @@ namespace SabreTools.DatFiles
#endregion
#endregion
#region Constructors
/// <summary>
@@ -204,8 +196,7 @@ namespace SabreTools.DatFiles
/// </summary>
internal void ClearEmpty()
{
string[] keys = [.. SortedKeys];
foreach (string key in keys)
foreach (string key in SortedKeys)
{
#if NET40_OR_GREATER || NETCOREAPP
// If the key doesn't exist, skip
@@ -240,8 +231,7 @@ namespace SabreTools.DatFiles
/// </summary>
internal void ClearMarked()
{
string[] keys = [.. SortedKeys];
foreach (string key in keys)
foreach (string key in SortedKeys)
{
// Perform filtering on items
List<DatItem> list = GetItemsForBucket(key, filter: true);
@@ -664,13 +654,12 @@ namespace SabreTools.DatFiles
// Set the sorted type
_mergedBy = dedupeType;
List<string> keys = [.. SortedKeys];
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(keys, key =>
Parallel.ForEach(SortedKeys, key =>
#else
foreach (var key in keys)
foreach (var key in SortedKeys)
#endif
{
// Get the possibly unsorted list
@@ -698,13 +687,12 @@ namespace SabreTools.DatFiles
/// </summary>
private void PerformSorting()
{
List<string> keys = [.. SortedKeys];
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(keys, key =>
Parallel.ForEach(SortedKeys, key =>
#else
foreach (var key in keys)
foreach (var key in SortedKeys)
#endif
{
// Get the possibly unsorted list

View File

@@ -152,8 +152,7 @@ namespace SabreTools.DatTools
/// <param name="datFile">Current DatFile object to run operations on</param>
internal void CleanDatItems(DatFile datFile)
{
List<string> keys = [.. datFile.Items.SortedKeys];
foreach (string key in keys)
foreach (string key in datFile.Items.SortedKeys)
{
// For every item in the current key
var items = datFile.GetItemsForBucket(key);

View File

@@ -109,8 +109,7 @@ namespace SabreTools.DatTools
datFile.BucketBy(ItemKey.SHA1, DedupeType.None);
// Then we want to loop through each of the hashes and see if we can rebuild
List<string> keys = [.. datFile.Items.SortedKeys];
foreach (string hash in keys)
foreach (string hash in datFile.Items.SortedKeys)
{
// Pre-empt any issues that could arise from string length
if (hash.Length != Constants.SHA1Length)

View File

@@ -83,17 +83,17 @@ namespace SabreTools.DatTools
{
DatStatistics individualStats = datdata.DatStatistics;
individualStats.DisplayName = datdata.Header.GetStringFieldValue(DatHeader.FileNameKey);
individualStats.MachineCount = datdata.Items.SortedKeys.Count;
individualStats.MachineCount = datdata.Items.SortedKeys.Length;
stats.Add(individualStats);
}
// Add single DAT stats to dir
dirStats.AddStatistics(datdata.DatStatistics);
dirStats.GameCount += datdata.Items.SortedKeys.Count;
dirStats.GameCount += datdata.Items.SortedKeys.Length;
// Add single DAT stats to totals
totalStats.AddStatistics(datdata.DatStatistics);
totalStats.GameCount += datdata.Items.SortedKeys.Count;
totalStats.GameCount += datdata.Items.SortedKeys.Length;
// Make sure to assign the new directory
lastdir = thisdir;

View File

@@ -58,8 +58,7 @@ namespace SabreTools.DatTools
datFile.BucketBy(ItemKey.SHA1, DedupeType.None);
// Then we want to loop through each of the hashes and see if we can rebuild
List<string> keys = [.. datFile.Items.SortedKeys];
foreach (string hash in keys)
foreach (string hash in datFile.Items.SortedKeys)
{
// Pre-empt any issues that could arise from string length
if (hash.Length != Constants.SHA1Length)
@@ -216,8 +215,7 @@ namespace SabreTools.DatTools
datFile.BucketBy(ItemKey.Machine, DedupeType.Full);
// Then mark items for removal
List<string> keys = [.. datFile.Items.SortedKeys];
foreach (string key in keys)
foreach (string key in datFile.Items.SortedKeys)
{
List<DatItem>? items = datFile.GetItemsForBucket(key);
if (items == null)

View File

@@ -141,7 +141,7 @@ namespace SabreTools.DatTools
datFile.BucketBy(ItemKey.Machine, DedupeType.None, norename: true);
datFile.DatStatistics.DisplayName = datFile.Header.GetStringFieldValue(DatHeader.FileNameKey);
datFile.DatStatistics.MachineCount = datFile.Items.SortedKeys.Count;
datFile.DatStatistics.MachineCount = datFile.Items.SortedKeys.Length;
List<DatStatistics> statsList =
[

View File

@@ -58,7 +58,7 @@ namespace SabreTools.Test.DatFiles
dict.AddItem(rom4, statsOnly: false);
dict.BucketBy(itemKey, DedupeType.None);
Assert.Equal(expected, dict.SortedKeys.Count);
Assert.Equal(expected, dict.SortedKeys.Length);
}
[Fact]