mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Rearrange methods in item dictionary
This commit is contained in:
@@ -99,6 +99,25 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generic constructor
|
||||||
|
/// </summary>
|
||||||
|
public ItemDictionary()
|
||||||
|
{
|
||||||
|
bucketedBy = ItemKey.NULL;
|
||||||
|
mergedBy = DedupeType.None;
|
||||||
|
#if NET40_OR_GREATER || NETCOREAPP
|
||||||
|
items = new ConcurrentDictionary<string, ConcurrentList<DatItem>?>();
|
||||||
|
#else
|
||||||
|
items = new Dictionary<string, ConcurrentList<DatItem>?>();
|
||||||
|
#endif
|
||||||
|
logger = new Logger(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Accessors
|
#region Accessors
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -192,6 +211,52 @@ namespace SabreTools.DatFiles
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Remove any keys that have null or empty values
|
||||||
|
/// </summary>
|
||||||
|
public void ClearEmpty()
|
||||||
|
{
|
||||||
|
var keys = items.Keys.Where(k => k != null).ToList();
|
||||||
|
foreach (string key in keys)
|
||||||
|
{
|
||||||
|
// If the key doesn't exist, skip
|
||||||
|
if (!items.ContainsKey(key))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// If the value is null, remove
|
||||||
|
else if (items[key] == null)
|
||||||
|
#if NET40_OR_GREATER || NETCOREAPP
|
||||||
|
items.TryRemove(key, out _);
|
||||||
|
#else
|
||||||
|
items.Remove(key);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// If there are no non-blank items, remove
|
||||||
|
else if (!items[key]!.Any(i => i != null && i is not Blank))
|
||||||
|
#if NET40_OR_GREATER || NETCOREAPP
|
||||||
|
items.TryRemove(key, out _);
|
||||||
|
#else
|
||||||
|
items.Remove(key);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Remove all items marked for removal
|
||||||
|
/// </summary>
|
||||||
|
public void ClearMarked()
|
||||||
|
{
|
||||||
|
var keys = items.Keys.ToList();
|
||||||
|
foreach (string key in keys)
|
||||||
|
{
|
||||||
|
ConcurrentList<DatItem>? oldItemList = items[key];
|
||||||
|
ConcurrentList<DatItem>? newItemList = oldItemList?.Where(i => i.GetBoolFieldValue(DatItem.RemoveKey) != true)?.ToConcurrentList();
|
||||||
|
|
||||||
|
Remove(key);
|
||||||
|
AddRange(key, newItemList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get if the file dictionary contains the key
|
/// Get if the file dictionary contains the key
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -349,25 +414,6 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Generic constructor
|
|
||||||
/// </summary>
|
|
||||||
public ItemDictionary()
|
|
||||||
{
|
|
||||||
bucketedBy = ItemKey.NULL;
|
|
||||||
mergedBy = DedupeType.None;
|
|
||||||
#if NET40_OR_GREATER || NETCOREAPP
|
|
||||||
items = new ConcurrentDictionary<string, ConcurrentList<DatItem>?>();
|
|
||||||
#else
|
|
||||||
items = new Dictionary<string, ConcurrentList<DatItem>?>();
|
|
||||||
#endif
|
|
||||||
logger = new Logger(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Bucketing
|
#region Bucketing
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -668,56 +714,6 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Custom Functionality
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Remove any keys that have null or empty values
|
|
||||||
/// </summary>
|
|
||||||
public void ClearEmpty()
|
|
||||||
{
|
|
||||||
var keys = items.Keys.Where(k => k != null).ToList();
|
|
||||||
foreach (string key in keys)
|
|
||||||
{
|
|
||||||
// If the key doesn't exist, skip
|
|
||||||
if (!items.ContainsKey(key))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// If the value is null, remove
|
|
||||||
else if (items[key] == null)
|
|
||||||
#if NET40_OR_GREATER || NETCOREAPP
|
|
||||||
items.TryRemove(key, out _);
|
|
||||||
#else
|
|
||||||
items.Remove(key);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// If there are no non-blank items, remove
|
|
||||||
else if (!items[key]!.Any(i => i != null && i is not Blank))
|
|
||||||
#if NET40_OR_GREATER || NETCOREAPP
|
|
||||||
items.TryRemove(key, out _);
|
|
||||||
#else
|
|
||||||
items.Remove(key);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Remove all items marked for removal
|
|
||||||
/// </summary>
|
|
||||||
public void ClearMarked()
|
|
||||||
{
|
|
||||||
var keys = items.Keys.ToList();
|
|
||||||
foreach (string key in keys)
|
|
||||||
{
|
|
||||||
ConcurrentList<DatItem>? oldItemList = items[key];
|
|
||||||
ConcurrentList<DatItem>? newItemList = oldItemList?.Where(i => i.GetBoolFieldValue(DatItem.RemoveKey) != true)?.ToConcurrentList();
|
|
||||||
|
|
||||||
Remove(key);
|
|
||||||
AddRange(key, newItemList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Statistics
|
#region Statistics
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user