我是F#的新手,我想知道如何平整列表.
基本上在数据库中我存储了一个带有min_age和max_age范围的记录(为了简洁起见,这是一个虚构的例子 - 我不是很疯狂!).我的字段看起来如下所示:
id,cost,savings,min_age,max_age
我本质上有一个F#类,它充当与该表的一对一映射 - 即所有属性都精确映射到数据库字段.
我想做的是平整这个范围.所以,而不是包含这样的项目的列表:
saving_id = 1, cost = 100, savings = 20, min_age = 20, max_age = 26
saving_id = 2, cost = 110, savings = 10, min_age = 27, max_age = 31
Run Code Online (Sandbox Code Playgroud)
我想要一个包含这样的项目的列表:
saving_id = 1, cost = 100, savings = 20, age = 20
saving_id = 1, cost = 100, savings = 20, age = 21
etc.
saving_id = 2, cost = 110, savings = 10, age = 27
saving_id = 2, …Run Code Online (Sandbox Code Playgroud) 我正在使用以下函数来展平多维数组:
function flatten($array, $prefix = '') {
$result = array();
foreach($array as $key=>$value) {
if(is_array($value)) {
$result = $result + flatten($value, $prefix . $key . '.');
}
else {
$result[$prefix . $key] = $value;
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个匹配函数,unflatten它将反转该过程(例如,如果密钥中包含一个子数组,则创建一个子数组.).有任何想法吗?
我知道Ruby有很多方法,特别是在数组或类似对象的数组上,例如sort或flatten.然而,这些方法也有一个双胞胎(带感叹号的那个)像sort!和flatten!.
现在我的问题是:
flatten和flatten!(破坏性扁平)有什么区别?我试图理解定义Some::flatten并遇到麻烦.以下是它的外观:
def flatten[B](implicit ev: A <:< Option[B]): Option[B] =
if (isEmpty) None else ev(this.get)
Run Code Online (Sandbox Code Playgroud)
我不明白的意思A <:< Option[B].什么<:<意思?
我有一个这样的字典:
migration_dict = {'30005': ['key42750','key43119', 'key44103', ['key333'],
['key444'], ['keyxx']], '30003': ['key43220', 'key42244','key42230',
['keyzz'], ['kehh']]}
Run Code Online (Sandbox Code Playgroud)
我怎样才能压平每个键的值以便得到类似的东西:
migration_dict = {'30005': ['key42750','key43119', 'key44103', 'key333',
'key444', 'keyxx'], '30003': ['key43220', 'key42244','key42230',
'keyzz', 'kehh']}
Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的 JSON 文件:
{
"id": 10011,
"title": "Test procedure",
"slug": "slug",
"url": "http://test.test",
"email": "test@test.com",
"link": "http://test.er",
"subject": "testing",
"level": 1,
"disciplines": [
"discipline_a",
"discipline_b",
"discipline_c"
],
"areas": [
"area_a",
"area_b"
]
},
Run Code Online (Sandbox Code Playgroud)
我试图使用以下命令将其转换为 CSV 文件:
(Get-Content "PATH_TO\test.json" -Raw | ConvertFrom-Json)| Convertto-CSV -NoTypeInformation | Set-Content "PATH_TO\test.csv"
Run Code Online (Sandbox Code Playgroud)
但是,对于学科和领域,我在生成的 CSV 文件中获取 System.Object[]。
有没有办法将所有这些嵌套值作为单独的列放在 CSV 文件中,如 area_1、area_2 等。对于学科也是如此。
我有以下数组:
$array = [
'2' => ['3' => ['56' => '2'], '6' => ['48' => '2']],
'4' => ['4' => ['433' => '2', '140' => '2'], '8' => ['421' => '2', '140' => '2']],
'5' => ['5' => ['88' => '4', '87' => '2']]
];
Run Code Online (Sandbox Code Playgroud)
以下代码(拼合)应通过保留键返回,但不是吗?
collect($array)->flatten(1);
Run Code Online (Sandbox Code Playgroud)
应该给我
[
'3' => ['56' => '2'],
'6' => ['48' => '2'],
'4' => ['433' => '2', '140' => '2'],
'8' => ['421' => '2', '140' => '2'],
'5' => ['88' => '4', …Run Code Online (Sandbox Code Playgroud) 我正在处理一个复杂的嵌套字典和列表数据结构。我需要展平数据并将所有嵌套项都置于0级。有关更多说明,请参见以下示例:
{a:1,b:2,c:{c1:[{c11:1,c12:2,c13:3},{c21:1,c22:2,c23:3}],d1:[{d11:1,d12:2,d13:3},{d21:1,d22:2,d23:3}]},x:1,y:2}
Run Code Online (Sandbox Code Playgroud)
我需要将其展平为:
{a:1,b:2,c_c1_c11:1, c_c1_c12:2,c_c1_c13:3,c_c1_c21:1,c_c1_c22:2,c_c1_c23:3, c_d1,d11:1...and so on}
Run Code Online (Sandbox Code Playgroud)
我从这篇文章的第一个答案中获得了参考,但是它只有在我嵌套了字典的情况下才可以使用,并且如果列表嵌套在字典中并且更多的字典嵌套在这些列表中则不能使用。
我对代码进行了一些修改以适合我的用例,但是此代码不起作用
def flattenDict(d):
node_map = {}
node_path = []
def nodeRecursiveMap(d, node_path):
for key, val in d.items():
if ((type(val) is not dict)&(type(val) is not list)):
node_map['_'.join(node_path + [key])] = val
if type(val) is list:
def nodeListRecursion(val,node_path):
for element in val:
if ((type(element) is not dict)&(type(element) is not list)) : node_map['_'.join(node_path + [key])] = element
if type(element) is list: nodeListRecursion(element,node_map)
if type(element) is dict: nodeRecursiveMap(element, node_path + [key])
nodeListRecursion(val,node_path)
if …Run Code Online (Sandbox Code Playgroud) 假设我具有标题中描述的结构:
Map<String, Map<String, Car>> mapNeighborhood
Run Code Online (Sandbox Code Playgroud)
包含附近分别由地址和车牌索引的所有汽车。我要选择所有红色汽车以黑色重新粉刷。为了完成该任务,我尝试使用Java 8来“平展”两个Map并获得一个List。一旦获得List,则应用谓词后,我只能选择红色汽车并进行重新绘制。
List<Car> listCars = new ArrayList<Car>();
mapNeighborhood.values().forEach(map -> map.values()
.forEach(car -> listCars.add(car)));
listCars.stream().filter(Car::isRed)
.forEach(car -> car.repaint(Color.Black));
Run Code Online (Sandbox Code Playgroud)
我敢肯定,在Java 8中仅使用一行就可以实现相同的目标,但是我认为您可能会失去可读性。
我的问题是:是否还有另一种较不冗长的方式将地图拼合为列表?也许使用flatMap。提前致谢。