d - 使用 std.algorithm 从数组中保存已删除值的更好方法
问题描述
我需要从数组中删除第一个元素,该元素存在于第二个数组中。
浏览std.algorithm包,我可以使用findAmong
and部分到达那里remove
。
但是有没有办法将这些结合起来,这样我既可以删除一个元素,又可以查看哪个元素被删除了?
例如:
// array that will have elements removed
auto targetStrings = ["a", "b", "c"];
// holder for element that will be removed
string removedString;
// array to match against, to determine what should be removed
auto removeStrings = ["b", "a"];
auto r = findAmong(targetStrings, removeStrings);
if (r.count > 0) {
removedString = r[0];
targetStrings = targetStrings.remove!(c => c == removedString);
}
writeln(removedString);
writeln(targetStrings);
解决方案
您可以通过从原始范围的长度中减去返回的剩余范围的长度来获取元素的索引findAmong
,然后只需remove
与索引一起使用:
auto r = findAmong(targetStrings, removeStrings);
if (!r.empty)
{
removedString = r.front;
auto index = targetStrings.length - r.length;
targetStrings = targetStrings.remove(index);
}
或者,直接使用以下命令获取索引countUntil
:
auto index = targetStrings.countUntil!(s => removeStrings.canFind(s));
if (index >= 0)
{
removedString = targetStrings[index];
targetStrings = targetStrings.remove(index);
}
推荐阅读
- css - 当我在 sass 文件中包含两次媒体查询时,是否可以在编译的 css 中只生成一次媒体查询?
- python - print() 和 matplitlib.pyplot.imshow() 未在 jupyter notebook 的“for”循环中同步
- javascript - JavaScript 和 Python Promise / Awaitable Evaluation 的区别
- postgresql - 将数据插入子表时,父表上的索引是否会更新?
- python - 是否可以在没有互联网和自定义路径库的机器上安装 scikit-learn?
- javascript - 从 Apache 服务器获取图像到托管在 tomcat 服务器上的 Web 应用程序
- aws-sdk-go - 将 map[string]types.AttributeValue 解组到特定的业务模型/结构
- java - 如何使用 Apache POI 在 Word 文档中添加指向图像的超链接?
- c# - 如何检查来自两个不同数据库的 productid(比较两个列表并返回不匹配的项目以添加)
- python - 在 django 迁移期间处理数据?