小编Phr*_*ogz的帖子

如何合并哈希数组以获取值数组的哈希值

这与将一个Hash of Arrays转换为Ruby中的Hashes数组相反.

优雅地和/或有效地将散列数组转换为散列值,其中值是所有值的数组:

hs = [
  { a:1, b:2 },
  { a:3, c:4 },
  { b:5, d:6 }
]
collect_values( hs )
#=> { :a=>[1,3], :b=>[2,5], :c=>[4], :d=>[6] }
Run Code Online (Sandbox Code Playgroud)

这个简洁的代码几乎可以工作,但是在没有重复的情况下无法创建数组:

def collect_values( hashes )
  hashes.inject({}){ |a,b| a.merge(b){ |_,x,y| [*x,*y] } }
end
collect_values( hs )
#=> { :a=>[1,3], :b=>[2,5], :c=>4, :d=>6 }
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但你能写一个更好的版本吗?

def collect_values( hashes )
  # Requires Ruby 1.8.7+ for Object#tap
  Hash.new{ |h,k| h[k]=[] }.tap do |result|
    hashes.each{ |h| h.each{ |k,v| result[k]<<v } }
  end …
Run Code Online (Sandbox Code Playgroud)

ruby arrays hash merge

44
推荐指数
1
解决办法
2万
查看次数

查找两个数组之间的共同值

如果我想比较两个数组,并创建一个插值输出字符串,如果从数组的数组变量y中存在x我怎么能获得每个匹配元素的输出?

这就是我的尝试但却没有得到结果.

x = [1, 2, 4]
y = [5, 2, 4]
x.each do |num|
  puts " The number #{num} is in the array" if x.include?(y.each)
end #=> [1, 2, 4]
Run Code Online (Sandbox Code Playgroud)

ruby

43
推荐指数
2
解决办法
3万
查看次数

将哈希转换为结构

如何将哈希转换为ruby中的结构?

鉴于这种:

h = { :a => 1, :b => 2 }
Run Code Online (Sandbox Code Playgroud)

我想要一个结构,这样:

s.a == 1
s.b == 2
Run Code Online (Sandbox Code Playgroud)

ruby

43
推荐指数
6
解决办法
2万
查看次数

使用utf-8编码写入和读取文件

我一直在阅读所有与UTF-8相关的问题和博客文章,我在test.rb文件中有以下示例:

# encoding: UTF-8
File.open("test.txt", "w") do |f|
  f.write "test © foo"
end

File.open("test.txt", "r") do |f|
  puts f.read
end
Run Code Online (Sandbox Code Playgroud)

这很完美.在文件中正确生成©符号,它将©读回我并将其打印在屏幕上.

但是当我在实际项目中使用相同的代码时,我将其写入文件而不是©符号: \u00A9

FWIW:我在对我的代码运行rspec(v1.2.9)测试时得到了这个结果.规范生成一个带有©符号的文件,然后重新读取文件以检查内容.

我目前正在Ruby 1.9.2中运行它,但我还需要支持一直回到Ruby 1.8.6.这是一个使用RubyInstaller.org版本的Ruby的Windows环境.

ruby utf-8

42
推荐指数
3
解决办法
6万
查看次数

查找id以公共字符串开头的所有元素

我有一个XSL创建了多个元素,其id为"createdOn"加上$ unique-id

Example : createdOnid0xfff5db30
Run Code Online (Sandbox Code Playgroud)

我想使用JavaScript在变量中找到并存储它们.我试过了

var dates = document.getElementsById(/createdOn/);
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

javascript regex

41
推荐指数
3
解决办法
5万
查看次数

将一个目录的内容复制到另一个目录

使用Ruby,如何将一个目录的内容复制到另一个目录?例如,给定(非空)目录A和B:

A/
  bar
  foo
B/
  jam
  jim
Run Code Online (Sandbox Code Playgroud)

我想将A中的所有内容复制到B中,从而导致:

A/
  bar
  foo
B/
  bar
  foo
  jam
  jim
Run Code Online (Sandbox Code Playgroud)

我无法使用,FileUtils.cp_r因为它复制了目录本身:

irb(main):001:0> require 'fileutils'
#=> true
irb(main):002:0> Dir['**/*']
#=> ["A", "A/bar", "A/foo", "B", "B/jam", "B/jim"]
irb(main):003:0> FileUtils.cp_r('A','B')
#=> nil
irb(main):004:0> Dir['**/*']
#=> ["A", "A/bar", "A/foo", "B", "B/A", "B/A/bar", "B/A/foo", "B/jam", "B/jim"]
Run Code Online (Sandbox Code Playgroud)

是否有比以下更好(更短,更有效)的答案?

Dir['A/*'].each{ |f| FileUtils.cp(f,"B") }
Run Code Online (Sandbox Code Playgroud)

ruby

41
推荐指数
3
解决办法
2万
查看次数

如何访问d3.js选择的parentNode?

我创建了以下文档:

<g>
    <path class=?"line" name=?"gene_1" stroke=?"#aec7e8" d=?"M10.47...">?</path>?
    <path class=?"line" name=?"gene_2" stroke=?"#aec7e8" d=?"M10.47...">?</path>?
    <path class=?"line" name=?"gene_3" stroke=?"#aec7e8" d=?"M10.47...">?</path>?
    ...
</g>
Run Code Online (Sandbox Code Playgroud)

当我将鼠标悬停在每条路径上时,我想将它最后添加到svg:g中,以便它显示在其他行的顶部,但我不知道如何正确选择parentNode:

function onmouseover(d, i){
    var current_gene_name = d3.select(this).attr("name"),
        current_gene_pcp = d3.select(".line[name=" + current_gene_name + "]");

    p1 = this.parentNode 

    p2 = current_gene_pcp[0].parentNode

    p3 = current_gene_pcp[0][0].parentNode

    //p.appendChild(this);
}
Run Code Online (Sandbox Code Playgroud)

p1有效,但我想确保"this"是.line,所以我更喜欢使用current_gene_pcp,但是p2 <html></html>作为父级返回,即使p3返回正确的<g></g>.最后一个版本似乎是一个等待发生的错误.有没有更好的办法?

javascript d3.js

39
推荐指数
3
解决办法
5万
查看次数

在HTML页面中查找所有文本节点

可能重复:
getElementsByTagName()等效于textNodes

对于这个问题,我需要找到特定节点下的所有文本节点.我可以这样做:

function textNodesUnder(root){
  var textNodes = [];
  addTextNodes(root);
  [].forEach.call(root.querySelectorAll('*'),addTextNodes);
  return textNodes;

  function addTextNodes(el){
    textNodes = textNodes.concat(
      [].filter.call(el.childNodes,function(k){
        return k.nodeType==Node.TEXT_NODE;
      })
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,鉴于XPath可以简单地查询.//text()并完成它,这似乎是不优雅的.

将所有文本节点放在HTML文档中的特定元素下的最简单方法是什么,适用于IE9 +,Safari5 +,Chrome19 +,Firefox12 +,Opera11 +?

"最简单"被宽松地定义为"有效且短暂,没有打高尔夫球".

html javascript

38
推荐指数
2
解决办法
3万
查看次数

将JavaScript生成的SVG转换为文件

我正在使用d3.js来显示一些数据.我希望能够获取它生成的SVG代码并将其存储为.svg图像文件(用于在Inkscape/Illustrator中进行编辑).

我试过简单地复制svg标签的内容即

<svg>
<!--snip-->
</svg>
Run Code Online (Sandbox Code Playgroud)

到一个名为image.svg的文件中,但是它错过了颜色/样式信息,它在两个单独的CSS文件中.

我正在使用这个例子.

有一个简单的方法吗?

javascript css svg d3.js

37
推荐指数
3
解决办法
1万
查看次数

为什么这个函数包含在括号中,后跟括号?

我一直在javascript源码中看到这一点,但我从未真正找到使用此构造的真正原因.为什么需要这个?

(function() {

    //stuff

})();
Run Code Online (Sandbox Code Playgroud)

为什么这样写的?为什么不单独使用stuff而不是在函数中使用?

编辑:我知道这是定义一个匿名函数然后调用它,但为什么

javascript function

36
推荐指数
2
解决办法
4058
查看次数

标签 统计

javascript ×5

ruby ×5

d3.js ×2

arrays ×1

css ×1

function ×1

hash ×1

html ×1

merge ×1

regex ×1

svg ×1

utf-8 ×1