创建随机字符串以表示RGB颜色

时间:2018-06-05 15:01:44

标签: scala random-data

假设我需要生成随机字符串来表示RGB颜色。该字符串由#和6个十六进制数字组成:例如#ff0000#cafe00

我正在使用random data generator这样做:

import com.danielasfregola.randomdatagenerator.RandomDataGenerator._
import org.scalacheck.{Arbitrary, Gen}

def randomRGB(): String = {

  implicit val arbitraryString: Arbitrary[String] = Arbitrary {
    for {
      r <- Gen.choose(0, 255)
      g <- Gen.choose(0, 255)
      b <- Gen.choose(0, 255)
    } yield "#" + r.toHexString + g.toHexString + b.toHexString
  }

  random[String]
}

你会如何改进它?

2 个答案:

答案 0 :(得分:1)

由于有三个范围0到255,每个范围用最大值0xff表示并且它们都在一个值中连接,我们可以直接取0... 0xffffff范围内的随机值产生结果字符串:

implicit val arbitraryString: Arbitrary[String] = Arbitrary {
  "#" + Gen.choose(0, 0xffffff).toHexString
}

答案 1 :(得分:1)

没有第三方库。

"#%06x".format(scala.util.Random.nextInt(1<<24))