flatten
在番石榴中是否有一种方法 - 或者将一种方法转换Iterable<Iterable<T>>
为一种方法Iterable<T>
?
我有一个Multimap<K, V>
[sourceMultimap],我想返回键匹配某个谓词[keyPredicate]的所有值.所以目前我有:
Iterable<Collection<V>> vals = Maps.filterKeys(sourceMultimap.asMap(), keyPredicate).values();
Collection<V> retColl = ...;
for (Collection<V> vs : vals) retColl.addAll(vs);
return retColl;
Run Code Online (Sandbox Code Playgroud)
我查看了番石榴文档,但没有跳出来.我只是检查我没有错过任何东西.否则,我会将我的三行提取为一个简短的扁平泛型方法,并保持原样.
说我有一个val s: Option[Option[String]]
.因此它可以具有以下值:
Some(Some("foo"))
Some(None)
None
我想减少它,以便第一个成为Some("foo")
另外两个成为None
.很明显,有很多方法可以实现这一目标,但我正在寻找一种简单的,可能是内置的,不足一线的.
我在MongoDB集合中有一个深层嵌套的集合.
当我运行以下查询时:
db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0})
Run Code Online (Sandbox Code Playgroud)
我最终得到了这个嵌套的结果:
{"data" : {
"country" : [
{
"neighbor" : [
{
"name" : "Austria"
},
{
"name" : "Switzerland"
}
]
},
{
"neighbor" : {
"name" : "Malaysia"
}
},
{
"neighbor" : [
{
"name" : "Costa Rica"
},
{
"name" : "Colombia"
}
]
}
]
}}
Run Code Online (Sandbox Code Playgroud)
现在,这就是我想要的:
['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']
Run Code Online (Sandbox Code Playgroud)
或这个:
{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']}
Run Code Online (Sandbox Code Playgroud)
或其他类似的东西......这可能吗?
在scala(2.9)中转换列表列表的最佳方法是什么?
我有一个清单:
List[List[A]]
Run Code Online (Sandbox Code Playgroud)
我要转换成
List[A]
Run Code Online (Sandbox Code Playgroud)
如何以递归方式实现?或者还有其他更好的方法吗?
我想拿这个val:
val f = List(Future(1), Future(2), Future(3))
Run Code Online (Sandbox Code Playgroud)
对它进行一些操作(我当时想要弄平)
f.flatten
Run Code Online (Sandbox Code Playgroud)
得到这个结果
scala> f.flatten = List(1,2,3)
Run Code Online (Sandbox Code Playgroud)
如果这里的展平方法不合适,那很好.只要我得到结果.
谢谢!
给定输入:
[{ a: 1 }, { b: 2 }, { c: 3 }]
Run Code Online (Sandbox Code Playgroud)
如何退货:
{ a: 1, b: 2, c: 3 }
Run Code Online (Sandbox Code Playgroud)
我今天去接受采访,要求我序列化一棵二叉树.我实现了一种基于数组的方法,其中节点i的子节点(在水平顺序遍历中编号)处于左子节点的2*i索引和右子节点的2*i + 1.面试官似乎或多或少都很高兴,但我想知道序列化究竟意味着什么?它是否专门用于展平树以写入磁盘,或者序列化树还包括将树转换为链表,比方说.另外,我们如何将树扁平化为(双重)链表,然后重构它?您可以从链表重新创建树的确切结构吗?
我试图在我的游戏中将3D阵列压平为1D阵列中的"块"系统.这是一个3D块游戏,基本上我希望块系统几乎与Minecraft的系统相同(但是,这不是Minecraft克隆的任何措施).在我以前的2D游戏中,我使用以下算法访问了扁平化数组:
Tiles[x + y * WIDTH]
Run Code Online (Sandbox Code Playgroud)
然而,这显然不适用于3D,因为它缺少Z轴.我不知道如何在3D空间中实现这种算法.宽度,高度和深度都是常量(宽度和高度一样大).
是x + y*WIDTH + Z*DEPTH
吗?我的数学非常糟糕,我只是开始进行3D编程,所以我很丢失:|
PS.这样做的原因是我循环并从索引中获取相当多的东西.我知道1D阵列比多维阵列更快(我记得的原因是:P).即使这可能没有必要,我希望尽可能好的表现:)
我想将源数组的所有单个元素推送到目标数组,
target.push(source);
Run Code Online (Sandbox Code Playgroud)
将源的引用放在目标列表上.
而不是我想做的事:
for (i = 0; i < source.length; i++) {
target.push(source[i]);
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法在javascript中更优雅,没有明确编码重复循环?
虽然我在这,但正确的用语是什么?我不认为"平推"是正确的.谷歌搜索没有产生任何结果,因为源和目标都是数组.
请在回答之前阅读整个问题.
我有这个多维数组:
$data = array(
'user' => array(
'email' => 'user@example.com',
'name' => 'Super User',
'address' => array(
'billing' => 'Street 1',
'delivery' => 'Street 2'
)
),
'post' => 'Hello, World!'
);
Run Code Online (Sandbox Code Playgroud)
我希望它变平,变成:
$data = array(
'user.email' => 'user@example.com',
'user.name' => 'Super User',
'user.address.billing' => 'Street 1',
'user.address.delivery' => 'Street 2',
'post' => 'Hello, World!'
);
Run Code Online (Sandbox Code Playgroud)
重要:
钥匙对我来说非常重要.我希望它们连接起来,用句点分隔.
它应该适用于任何级别的嵌套.
谢谢!